/**
 * 此文件用于打包项目 执行npm run package
 * @author xuejianxinokok
 */

// require modules
const fs = require('fs')
const archiver = require('archiver')
const path = require('path')

// create a file to stream archive data to.
const output = fs.createWriteStream(path.join(__dirname, '../../dist.zip'))
// 设置压缩格式为zip
const archive = archiver('zip', {
  zlib: { level: 9 } // Sets the compression level.
})

// listen for all archive data to be written
// 'close' event is fired only when a file descriptor is involved
output.on('close', function () {
  console.log(archive.pointer() + ' total bytes')
  console.log('package has been success!!!')
})

// This event is fired when the data source is drained no matter what was the data source.
// It is not part of this library but rather from the NodeJS Stream API.
// @see:   https://nodejs.org/api/stream.html#stream_event_end
output.on('end', function () {
  console.log('Data has been drained')
})

// good practice to catch this error explicitly
archive.on('error', function (err) {
  throw err
})
// pipe archive data to the file
archive.pipe(output)
// append a file from stream
// const file1 = __dirname + '/file1.txt'
// archive.append(fs.createReadStream(file1), { name: 'file1.txt' })

// append a file from string
// archive.append('string cheese!', { name: 'file2.txt' })
// append a file from buffer
// const buffer3 = Buffer.from('buff it!')
// archive.append(buffer3, { name: 'file3.txt' })

// append a file
// archive.file('file1.txt', { name: 'file4.txt' })

// append files from a sub-directory and naming it `new-subdir` within the archive
// archive.directory('subdir/', 'new-subdir')

// append files from a sub-directory, putting its contents at the root of archive
// archive.directory('subdir/', false)

// append files from a glob pattern
// archive.glob('subdir/*.txt')

// 打包文件
archive.directory('src/', 'src')
archive.directory('static/', 'static')
archive.directory('node_modules/', 'node_modules')
archive.file('package.json', { name: 'package.json' })

// 生成启动命令
const bat = Buffer.from('npm run start')
archive.append(bat, { name: 'start.bat' })
const sh = Buffer.from('#!/bin/bash \nnpm run start')
archive.append(sh, { name: 'start.sh' })

// finalize the archive (ie we are done appending files but streams have to finish yet)
// 'close', 'end' or 'finish' may be fired right after calling this method so register to them beforehand
archive.finalize()
